#include<stdio.h>
#include<unistd.h>
#include<string.h>
#include<stdlib.h>
#include<malloc.h>
#include<sys/types.h>

int g_unval;
int g_val=100;

int main(int argc,char *argv[],char *envp[])
{
  pid_t id =fork();
  if(id==0)
  {
    g_val=200;
    printf("child: pid: %d , ppid: %d,g_val: %d &g_val:%p\n",getpid(),getppid(),g_val,&g_val);  
  }
  else 
  {
    sleep(2);
    printf("parent: pid: %d , ppid: %d,g_val: %d &g_val:%p\n",getpid(),getppid(),g_val,&g_val);  
  }
  sleep(1);
 // printf("code addr: %p\n",main);
 // char* str="hello world";
 // printf("read only addr: %p\n",str);
 // printf("init addr: %p\n",&g_val);
 // printf("uninit addr: %p\n",&g_unval);
 // 
 // int *p=malloc(100);

 // printf("heap addr: %p\n",p);

 // printf("stack add: %p\n",&str);
 // printf("stack add: %p\n",&p);

 // for(int i=0;i<argc;i++)
 // {
 //   printf("args addr: %p\n",argv[i]);
 // }
 // int j=0;
 // while(envp[j])
 // {
 //   printf("env addr: %p\n",envp[j]);
 //   j++;
 // }

//  printf("%s ...\n\n",getenv("PATH"));
////获取环境变量
//  extern char** environ; 
//  int i=0;
//  while(environ[i]!=NULL)
//  {
//    printf("environ[%d] %s\n",i,environ[i]);
//    i++;
//  }
//  int i=0;
//  while(envp[i]!=NULL)
//  {
//    printf("envp[%d] %s\n",i,envp[i]);
//    i++;
//  }
  //命令行参数
//  if(argc==2)
//  {
//    if(strcmp(argv[1],"-a")==0)
//    {
//      printf("hello zsd \n");
//    }
//    else if(strcmp(argv[1],"-b")==0)
//    {
//      printf("hello linux! \n");
//    }
//    else 
//    {
//      printf("default...\n");
//    }
//  }
//  printf("argc :%d\n",argc);
  return 0;
}
